# For each..next

for each..next 控制语句是一个脚本迭代构造，可为逗号分隔列表中的每个值执行一个或几个语句。列表中的每个值均会执行由 for 和 next 限定的循环中的语句。

语法：

特殊语法可以生成带有当前目录内文件和目录名称的列表。

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

参数：

参数

| 参数 | 说明 |
| --- | --- |
| var | 脚本变量名称，可为每次循环执行获取列表中的新值。如果 var 在 next 之后指定，变量名必须与对应的 for each 之后查找的变量名相同。 |

var 变量的值可通过循环内的语句进行更改，但这并非出色的编程做法。

如果在循环内遇到 exit for 子句，则脚本执行会转移至表示循环结束的 next 子句之后的第一个语句。exit for 子句可通过选择性使用 when 或 unless 后缀变为有条件子句。

信息注释由于 for each..next 语句是控制语句，并以分号或换行符结束，三个可能子句（for each、exit for 和 next）中任意一个子句都不得跨越行边界。

语法：

list := item { , item }

item := constant | (expression) | filelist mask | dirlist mask | fieldvaluelist mask

参数

| 参数 | 说明 |
| --- | --- |
| constant | 任何数字或字符串。请注意，直接在脚本中写入的字符串必须附上单引号。没有单引号的字符串将被解释为变量，而变量的值之后将被使用。数字不必用单引号引起来。 |
| expression | 任意表达式。 |
| mask | 文件名称或文件夹名称掩码，包括任何有效的文件名称字符及标准通配符，比如 \* 和 ?。<br><br>您可以使用绝对文件路径或 lib:// 路径。 |
| condition | 用于评估 True 或 False 的逻辑表达式。 |
| statements | 一个或多个 Qlik Sense 脚本语句的任意组。 |
| filelist mask | 该语法会在匹配文件名称掩码的当前目录中生成逗号分隔的全部文件列表。<br><br>信息注释此参数仅在标准模式下支持库连接。请参阅[文件系统访问限制](https://help.qlik.com/zh-CN/sense/November2024/Subsystems/Hub/Content/Sense_Hub/LoadData/file-system-access-restriction.htm) |
| dirlist mask | 该语法会在匹配文件夹名称掩码的当前文件夹中生成逗号分隔的全部文件夹列表。<br><br>信息注释此参数仅在标准模式下支持库连接。请参阅[文件系统访问限制](https://help.qlik.com/zh-CN/sense/November2024/Subsystems/Hub/Content/Sense_Hub/LoadData/file-system-access-restriction.htm) |
| fieldvaluelist mask | 此语法迭代已经加载到 Qlik Sense 的字段值。 |

警告注释Qlik Web 存储提供程序连接器 以及其它 DataFiles 连接不支持使用通配符（\* 和 ?）字符的筛选器掩码。

示例 1: 加载文件列表

```
// LOAD the files 1.csv, 3.csv, 7.csv and xyz.csv
for each a in 1,3,7,'xyz'
   LOAD * from file$(a).csv;
next
```

示例 2: 在磁盘上创建文件列表

此示例加载文件夹中所有 Qlik Sense 相关文件的列表。

```

sub DoDir (Root)
   for each Ext in 'qvw', 'qva', 'qvo', 'qvs', 'qvc', 'qvf', 'qvd'

      for each File in filelist (Root&'/*.' &Ext)

         LOAD 
            '$(File)' as Name, 
            FileSize( '$(File)' ) as Size, 
            FileTime( '$(File)' ) as FileTime
         autogenerate 1;

      next File

   next Ext
   for each Dir in dirlist (Root&'/*' )

      call DoDir (Dir)

   next Dir

end sub

call DoDir ('lib://DataFiles')
```

示例 3: 迭代字段值

此示例迭代已加载的 FIELD 值列表，并生成新字段 NEWFIELD。对每个 FIELD 值，都会创建两条 NEWFIELD 记录。

```

load * inline [
FIELD
one
two
three
];

FOR Each a in FieldValueList('FIELD')
LOAD '$(a)' &'-'&RecNo() as NEWFIELD AutoGenerate 2;
NEXT a 
```

最终生成的表格如下所示：

Example table

| NEWFIELD |
| --- |
| one-1 |
| one-2 |
| two-1 |
| two-2 |
| three-1 |
| three-2 |

## 了解详情

* [For..next](https://help.qlik.com/zh-CN/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptControlStatements/For.htm)
* [Next](https://help.qlik.com/zh-CN/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptControlStatements/Next.htm)
* [Exit](https://help.qlik.com/zh-CN/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptControlStatements/Exit.htm)